#include <54func.h>
//验证匿名管道的性质：
int main()
{
    int fds[2];
    pipe(fds);
    //验证读阻塞，父进程不写，子进程读阻塞
   // if(fork())
   // {
   //     close(fds[0]);//关闭读端
   //     sleep(5);
   //     printf("sleep over!\n");
   //     write(fds[1],"hello",5);
   // }else{
   //     close(fds[1]);//关闭写端
   //     char buf[4096] = {0};
   //     read(fds[0],buf,sizeof(buf));
   //     printf("I am child,buf = %s\n",buf);
   // }
   
    //验证读写阻塞,一边不停的写，一边不停的读，保证写是比读快！！！
   // if(fork())
   // {
   //     close(fds[0]);
   //     char buf[4096] = {0};
   //     int cnt = 0;
   //     while(1)
   //     {
   //         write(fds[1],buf,4096);
   //         printf("write one,cnt = %d\n",cnt++);
   //         sleep(1);
   //     }
   // }else{
   //     close(fds[1]);
   //     char buf[4096] = {0};
   //     int cnt = 0;
   //     while(1)
   //     {
   //         read(fds[0],buf,2048);
   //         printf("read one,cnt = %d\n",cnt++);
   //         sleep(1);
   //     }
   //     
   // }

    //读端关闭，写端会保持错
   // if(fork())
   // {
   //     close(fds[0]);
   //     sleep(5);
   //     printf("sleep over!\n");

   //     write(fds[1],"hello",5);
   //     printf("Can you see me!\n");
   //     wait(NULL);
   //     
   // }else{
   //     close(fds[1]);
   //     close(fds[0]);//子进程读端与写端均关闭
   //     while(1)
   //     {
   //         sleep(1);
   //     }
   // }

    //写端关闭，读端会打印0
    if(fork()){
        close(fds[0]);

        close(fds[1]);
        wait(NULL);

    }else{
        close(fds[1]);
        char buf[4096] = {0};
        sleep(5);
        printf("sleep over!\n");
        read(fds[0],buf,sizeof(buf));
        printf("buf = %s\n",buf);
    }

    return 0;
}
